/*
* 
* Fichier source projet pac-man.
* 
* Cree le : mercredi 23 novembre 2011 à 16 : 30.
* Auteurs : Gregoire BARRET.
* 
* Nom de fichier : deplacement.c
* Chemin du fichier : deplacement.c
* 
* Description :
* 
*/


#include "deplacement.h"


int deplacements(char dep, struct Struct_Carte *str_carte, int joueur)
{

	if(joueur == 0)
	{
		deplacement_joueur1(dep, str_carte);
	}
	
	else if(joueur == 1)
	{
		deplacement_joueur2(dep, str_carte);
	}
	else if(joueur == 2)
	{
		IA(str_carte);
	}


	return 0;

}

int deplacement_joueur1(char dep, struct Struct_Carte *str_carte)
{
	struct Struct_position_futur str_pos_futur;
	struct Struct_position_futur str_pos_hold;

	str_pos_hold.x = str_carte->joueur1.x;
	str_pos_hold.y = str_carte->joueur1.y;

	switch (dep){
		case 'H':
			str_pos_futur.x = (str_carte->joueur1.x) -1;
			str_pos_futur.y = str_carte->joueur1.y;
			break;

		case 'B':
			str_pos_futur.x = (str_carte->joueur1.x)+1;
			str_pos_futur.y = str_carte->joueur1.y;
			break;

		case 'G':
			str_pos_futur.x = str_carte->joueur1.x;
			str_pos_futur.y = (str_carte->joueur1.y) -1;
			break;
		case 'D':
			str_pos_futur.x = str_carte->joueur1.x;
			str_pos_futur.y = (str_carte->joueur1.y) +1;
			break;
	
		default:
			str_pos_futur.x = str_carte->joueur1.x;
			str_pos_futur.y = str_carte->joueur1.y;
	}

	switch (str_carte->carte[str_pos_futur.x][str_pos_futur.y]) {
		case ' ':
			str_carte->joueur1.x = str_pos_futur.x;
			str_carte->joueur1.y = str_pos_futur.y;
			break;

		case '#':
			str_carte->joueur1.x = str_carte->joueur1.x;
			str_carte->joueur1.y = str_carte->joueur1.y;
			break; 
	

		case '.':
			str_carte->joueur1.x = str_pos_futur.x;
			str_carte->joueur1.y = str_pos_futur.y;
			str_carte->joueur1.score = str_carte->joueur1.score +10;
			(*str_carte).carte[str_pos_futur.x][str_pos_futur.y] = ' ';
			break;
		case 'o':
			str_carte->joueur1.x = str_pos_futur.x;
			str_carte->joueur1.y = str_pos_futur.y;
			str_carte->carte[str_pos_futur.x][str_pos_futur.y] = ' ';
			str_carte->joueur1.time = 20;
			
			

		default:
			str_carte->joueur1.x = str_pos_futur.x;
			str_carte->joueur1.y = str_pos_futur.y;
		}
	
	(*str_carte).carte[str_pos_hold.x][str_pos_hold.y] = ' ';
	str_carte->carte[str_carte->joueur1.x][str_carte->joueur1.y] = str_carte->joueur1.symbole;
}

int deplacement_joueur2(char dep, struct Struct_Carte *str_carte)
{
	struct Struct_position_futur str_pos_futur;
	struct Struct_position_futur str_pos_hold;

	str_pos_hold.x = str_carte->joueur2.x;
	str_pos_hold.y = str_carte->joueur2.y;
	switch (dep){
		case 'H':
			str_pos_futur.x = (str_carte->joueur2.x) -1;
			str_pos_futur.y = str_carte->joueur2.y;
			break;

		case 'B':
			str_pos_futur.x = (str_carte->joueur2.x)+1;
			str_pos_futur.y = str_carte->joueur2.y;
			break;

		case 'G':
			str_pos_futur.x = str_carte->joueur2.x;
			str_pos_futur.y = (str_carte->joueur2.y) -1;
			break;
		case 'D':
			str_pos_futur.x = str_carte->joueur2.x;
			str_pos_futur.y = (str_carte->joueur2.y) +1;
			break;
		
		default:
			str_pos_futur.x = str_carte->joueur2.x;
			str_pos_futur.y = str_carte->joueur2.y;
	}

	switch (str_carte->carte[str_pos_futur.x][str_pos_futur.y]) {
		case ' ':
			str_carte->joueur2.x = str_pos_futur.x;
			str_carte->joueur2.y = str_pos_futur.y;
			break;

		case '#':
			str_carte->joueur2.x = str_carte->joueur2.x;
			str_carte->joueur2.y = str_carte->joueur2.y;
			break; 
	
		case '.':
			str_carte->joueur2.x = str_pos_futur.x;
			str_carte->joueur2.y = str_pos_futur.y;
			str_carte->joueur2.score = str_carte->joueur2.score +10;
			(*str_carte).carte[str_pos_futur.x][str_pos_futur.y] = ' ';
			break;
		case 'o':
			str_carte->joueur2.x = str_pos_futur.x;
			str_carte->joueur2.y = str_pos_futur.y;
			str_carte->carte[str_pos_futur.x][str_pos_futur.y] = ' ';
			str_carte->joueur2.time = 20;
	

		default:
			str_carte->joueur2.x = str_pos_futur.x;
			str_carte->joueur2.y = str_pos_futur.y;
		}
	
	(*str_carte).carte[str_pos_hold.x][str_pos_hold.y] = ' ';
	str_carte->carte[str_carte->joueur2.x][str_carte->joueur2.y] = str_carte->joueur2.symbole;
}


int IA (struct Struct_Carte* str_carte)
{
	int nombre_aleatoire = 0;
	int i;
	char dep;
	for (i =0;i<4;i++)
	{
		nombre_aleatoire = rand()%4;
		switch (nombre_aleatoire) {
			case 0:
				dep = 'H';
				break;
			case 1:
				dep = 'B';
				break;

			case 2:
				dep = 'G';
				break;
			case 3:
				dep = 'D';
				break;
			default:
				dep = 'H';
		}
		switch (i) {
			case 0:
				deplacement_inky( dep, str_carte);
				break;
			case 1:
				deplacement_blinky(dep, str_carte);
				break;
			case 2:
				deplacement_clyde(dep ,str_carte);
				break;
			case 3:
				deplacement_pinky(dep, str_carte);
				break;
		default:
				deplacement_inky(dep , str_carte);
		}

	}

	return 0;
}

int deplacement_inky(char dep, struct Struct_Carte *str_carte)
{
	struct Struct_position_futur str_pos_futur;
	struct Struct_position_futur str_pos_hold;

	str_pos_hold.x = str_carte->inky.x;
	str_pos_hold.y = str_carte->inky.y;
	switch (dep){
		case 'H':
			str_pos_futur.x = (str_carte->inky.x) -1;
			str_pos_futur.y = str_carte->inky.y;
			break;

		case 'B':
			str_pos_futur.x = (str_carte->inky.x)+1;
			str_pos_futur.y = str_carte->inky.y;
			break;

		case 'G':
			str_pos_futur.x = str_carte->inky.x;
			str_pos_futur.y = (str_carte->inky.y) -1;
			break;
		case 'D':
			str_pos_futur.x = str_carte->inky.x;
			str_pos_futur.y = (str_carte->inky.y) +1;
			break;
		
		default:
			str_pos_futur.x = str_carte->inky.x;
			str_pos_futur.y = str_carte->inky.y;
	}

	switch (str_carte->carte[str_pos_futur.x][str_pos_futur.y]) {
		case ' ':
			str_carte->inky.x = str_pos_futur.x;
			str_carte->inky.y = str_pos_futur.y;
			break;

		case '#':
			str_carte->inky.x = str_carte->inky.x;
			str_carte->inky.y = str_carte->inky.y;
			break; 
	
	
		default:
			str_carte->inky.x = str_pos_futur.x;
			str_carte->inky.y = str_pos_futur.y;
		}
	
	(*str_carte).carte[str_pos_hold.x][str_pos_hold.y] = ' ';
	str_carte->carte[str_carte->inky.x][str_carte->inky.y] = str_carte->inky.symbole;
}
int deplacement_blinky(char dep, struct Struct_Carte *str_carte)
{
	struct Struct_position_futur str_pos_futur;
	struct Struct_position_futur str_pos_hold;

	str_pos_hold.x = str_carte->blinky.x;
	str_pos_hold.y = str_carte->blinky.y;
	switch (dep){
		case 'H':
			str_pos_futur.x = (str_carte->blinky.x) -1;
			str_pos_futur.y = str_carte->blinky.y;
			break;

		case 'B':
			str_pos_futur.x = (str_carte->blinky.x)+1;
			str_pos_futur.y = str_carte->blinky.y;
			break;

		case 'G':
			str_pos_futur.x = str_carte->blinky.x;
			str_pos_futur.y = (str_carte->blinky.y) -1;
			break;
		case 'D':
			str_pos_futur.x = str_carte->blinky.x;
			str_pos_futur.y = (str_carte->blinky.y) +1;
			break;
		
		default:
			str_pos_futur.x = str_carte->blinky.x;
			str_pos_futur.y = str_carte->blinky.y;
	}

	switch (str_carte->carte[str_pos_futur.x][str_pos_futur.y]) {
		case ' ':
			str_carte->blinky.x = str_pos_futur.x;
			str_carte->blinky.y = str_pos_futur.y;
			break;

		case '#':
			str_carte->blinky.x = str_carte->blinky.x;
			str_carte->blinky.y = str_carte->blinky.y;
			break; 
	
	
		default:
			str_carte->blinky.x = str_pos_futur.x;
			str_carte->blinky.y = str_pos_futur.y;
		}
	
	(*str_carte).carte[str_pos_hold.x][str_pos_hold.y] = ' ';
	str_carte->carte[str_carte->blinky.x][str_carte->blinky.y] = str_carte->blinky.symbole;
}
int deplacement_clyde(char dep, struct Struct_Carte *str_carte)
{
	struct Struct_position_futur str_pos_futur;
	struct Struct_position_futur str_pos_hold;

	str_pos_hold.x = str_carte->clyde.x;
	str_pos_hold.y = str_carte->clyde.y;
	switch (dep){
		case 'H':
			str_pos_futur.x = (str_carte->clyde.x) -1;
			str_pos_futur.y = str_carte->clyde.y;
			break;

		case 'B':
			str_pos_futur.x = (str_carte->clyde.x)+1;
			str_pos_futur.y = str_carte->clyde.y;
			break;

		case 'G':
			str_pos_futur.x = str_carte->clyde.x;
			str_pos_futur.y = (str_carte->clyde.y) -1;
			break;
		case 'D':
			str_pos_futur.x = str_carte->clyde.x;
			str_pos_futur.y = (str_carte->clyde.y) +1;
			break;
		
		default:
			str_pos_futur.x = str_carte->clyde.x;
			str_pos_futur.y = str_carte->clyde.y;
	}

	switch (str_carte->carte[str_pos_futur.x][str_pos_futur.y]) {
		case ' ':
			str_carte->clyde.x = str_pos_futur.x;
			str_carte->clyde.y = str_pos_futur.y;
			break;

		case '#':
			str_carte->clyde.x = str_carte->clyde.x;
			str_carte->clyde.y = str_carte->clyde.y;
			break; 
	
	
		default:
			str_carte->clyde.x = str_pos_futur.x;
			str_carte->clyde.y = str_pos_futur.y;
		}
	
	(*str_carte).carte[str_pos_hold.x][str_pos_hold.y] = ' ';
	str_carte->carte[str_carte->clyde.x][str_carte->clyde.y] = str_carte->clyde.symbole;
}
int deplacement_pinky(char dep, struct Struct_Carte *str_carte)
{
	struct Struct_position_futur str_pos_futur;
	struct Struct_position_futur str_pos_hold;

	str_pos_hold.x = str_carte->pinky.x;
	str_pos_hold.y = str_carte->pinky.y;
	switch (dep){
		case 'H':
			str_pos_futur.x = (str_carte->pinky.x) -1;
			str_pos_futur.y = str_carte->pinky.y;
			break;

		case 'B':
			str_pos_futur.x = (str_carte->pinky.x)+1;
			str_pos_futur.y = str_carte->pinky.y;
			break;

		case 'G':
			str_pos_futur.x = str_carte->pinky.x;
			str_pos_futur.y = (str_carte->pinky.y) -1;
			break;
		case 'D':
			str_pos_futur.x = str_carte->pinky.x;
			str_pos_futur.y = (str_carte->pinky.y) +1;
			break;
		
		default:
			str_pos_futur.x = str_carte->pinky.x;
			str_pos_futur.y = str_carte->pinky.y;
	}

	switch (str_carte->carte[str_pos_futur.x][str_pos_futur.y]) {
		case ' ':
			str_carte->pinky.x = str_pos_futur.x;
			str_carte->pinky.y = str_pos_futur.y;
			break;

		case '#':
			str_carte->pinky.x = str_carte->pinky.x;
			str_carte->pinky.y = str_carte->pinky.y;
			break; 
	
	
		default:
			str_carte->pinky.x = str_pos_futur.x;
			str_carte->pinky.y = str_pos_futur.y;
		}
	
	(*str_carte).carte[str_pos_hold.x][str_pos_hold.y] = ' ';
	str_carte->carte[str_carte->pinky.x][str_carte->pinky.y] = str_carte->pinky.symbole;
}


int verifcarte(struct Struct_Carte *str_carte)
{
	if ( ((str_carte->joueur1.x==str_carte->blinky.x)&&(str_carte->joueur1.y==str_carte->blinky.y)) || ((str_carte->joueur1.x==str_carte->inky.x)&&(str_carte->joueur1.y==str_carte->inky.y)) || ((str_carte->joueur1.x==str_carte->pinky.x)&&(str_carte->joueur1.y==str_carte->pinky.y)) || ((str_carte->joueur1.x==str_carte->clyde.x)&&(str_carte->joueur1.y==str_carte->clyde.y)) )
	{
		str_carte->carte[str_carte->joueur1.x][str_carte->joueur1.y] = ' ';
		str_carte->joueur1.vie = str_carte->joueur1.vie - 1;
		str_carte->joueur1.x = 19;
		str_carte->joueur1.y = 12;
		str_carte->carte[str_carte->joueur1.x][str_carte->joueur1.y] = str_carte->joueur1.symbole;

	}
	if ( ((str_carte->joueur2.x==str_carte->blinky.x)&&(str_carte->joueur2.y==str_carte->blinky.y)) || ((str_carte->joueur2.x==str_carte->inky.x)&&(str_carte->joueur2.y==str_carte->inky.y)) || ((str_carte->joueur2.x==str_carte->pinky.x)&&(str_carte->joueur2.y==str_carte->pinky.y)) || ((str_carte->joueur2.x==str_carte->clyde.x)&&(str_carte->joueur2.y==str_carte->clyde.y)) )
	{
		str_carte->carte[str_carte->joueur2.x][str_carte->joueur2.y] = ' ';
		str_carte->joueur2.vie = str_carte->joueur2.vie - 1;
		str_carte->joueur2.x = 6;
		str_carte->joueur2.y = 12;
		str_carte->carte[str_carte->joueur2.x][str_carte->joueur2.y] = str_carte->joueur2.symbole;

	}
	if( str_carte->joueur1.time != 0)
	{
		str_carte->joueur1.time = str_carte->joueur1.time -1;
	}
	if( str_carte->joueur2.time != 0)
	{
		str_carte->joueur2.time = str_carte->joueur2.time -1;
	}



}








	
